package cn.tedu.spring.example;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestUser {
    public static void main(String[] args) throws Exception {
        /**
         * 方式1:new方式
         */
        User user1 = new User();
        user1.run();

        /**
         * 方式2:反射方式创建对象
         */
        Class zz = Class.forName("cn.tedu.spring.example.User");
        User user2 = (User)zz.newInstance();
        user2.run();

        /**
         * 方式3:通过Spring框架创建对象
         * 1.由Spring框架创建出来的对象,叫做 Spring Bean对象,简称 Bean对象
         * 2.Bean对象和普通的java对象没有任何区别,只是为了区分创建者的身份
         * 3.IoC容器:创建和存放Spring Bean对象的容器
         */
        /*
            IoC
                控制反转的编程思想,反转资源的获取方向
                把对象的创建和管理交由框架来完成,而不是由开发人员手动创建和管理

            IoC容器
                实现IoC控制反转思想的一种技术手段
                创建IoC容器
                    ApplicationContext context = new AnnotationConfigApplicationContext
                            ("包路径");
            依赖注入-DI
                给Spring Bean对象的属性赋值

            注意:IoC是控制反转思想,IoC容器和DI依赖注入是实现IoC控制反转思想的两种技术手段
         */
        ApplicationContext context = new AnnotationConfigApplicationContext
                ("cn.tedu.spring.example"); //创建IoC容器
        User user3 = context.getBean(User.class); //获取Bean
        user3.run();
    }
}
